package com.taoyibao.hongcanting.utils;

import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.widget.TextView;

import com.taoyibao.hongcanting.R;
import com.taoyibao.hongcanting.ui.HongApplication;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author TangAnna
 * @description: 业务功能工具类
 * @date :${DATA} 19:37
 */
public class CodeUtils {

    /**
     * 判断手机号码是否合法
     */
    public static boolean judgePhoneNumber(String str) {
        String regular_phone_number = "^1[3456789]\\d{9}$";
        Pattern p = Pattern.compile(regular_phone_number);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 获取Resources对象
     */
    public static Resources getResources() {
        return HongApplication.getInstance().getResources();
    }

    /**
     * 获取资源文件中的String
     *
     * @param id
     * @return
     */
    public static String getIdString(int id) {
        return getResources().getString(id);
    }

    /**
     * 获取资源文件中的Drawable文件
     *
     * @param id
     * @return
     */
    public static Drawable getIdDrawable(int id) {
        return getResources().getDrawable(id);
    }

    /**
     * 获取资源文件中的颜色值
     *
     * @param id
     * @return
     */
    public static int getIdColor(int id) {
        return getResources().getColor(id);
    }


    /**
     * 更改获取验证码的TextView显示的内容
     */
    public static void setSecurityTextView(final TextView textView) {
        CountDownTimer countDownTimer = new CountDownTimer(60 * 1000, 1000) {
            public void onTick(long millisUntilFinished) {
                textView.setText(millisUntilFinished / 1000 + "秒重试");
                textView.setTextColor(Color.WHITE);
                textView.setBackgroundDrawable(getIdDrawable(R.drawable.shape_bg_raduis_gray));
                textView.setEnabled(false);
            }

            public void onFinish() {
                textView.setText("获取验证码");
                textView.setTextColor(Color.WHITE);
                textView.setBackgroundDrawable(getIdDrawable(R.drawable.shape_bg_raduis_gold));
                textView.setEnabled(true);
//                if (mCodeListener != null) {
//                    mCodeListener.onFinish();
//                }
            }
        };
        countDownTimer.start();
    }

    private static CodeListener mCodeListener;

    public static void setmCodeListener(CodeListener codeListener) {
        mCodeListener = codeListener;
    }

    public interface CodeListener {
        void onFinish();
    }

    /**
     * 格式化手机号  中间显示四个****
     *
     * @param phone
     * @return
     */
    public static String formatHintPhone(String phone) {

        if (TextUtils.isEmpty(phone)) {
            return "空的手机号";
        } else if (!CodeUtils.judgePhoneNumber(phone)) {
            return "手机号格式不正确";
        } else {//18201399976
            StringBuilder sb = new StringBuilder(phone);
            return sb.replace(3, 7, "****").toString();
        }
    }

    /**
     * 安全设置保密信息
     *
     * @param nub  原数据
     * @param star 开始下标
     * @param end  结束下标  （前包含后包含）
     * @return
     */
    public static String hintNub(String nub, int star, int end) {
        if (nub.length() < star || nub.length() < end) {
            return nub;
        }
        StringBuilder sb = new StringBuilder(nub);
        if (TextUtils.isEmpty(nub) || (end - star) < 1) {
            return "";
        }
        String str = "";
        for (int i = 0; i < end + 1 - star; i++) {
            str = str + "*";
        }
        return sb.replace(star, end + 1, str).toString();
    }

    /**
     * 格式化金额 保留两位小数
     * 如果是整数不显示小数点
     *
     * @param d 格式化前的金额
     * @return String类型的数值
     */
    public static String formatAmount2String(Double d) {
        if (!(d instanceof Double)) {
            return "";
        }
        return formatAmount2String(d, false);
    }

    /**
     * 格式化金额 保留两位小数
     *
     * @param d 格式化前的金额
     * @param b 整数是否显示小数点  true 显示  false 不显示
     * @return String类型的数值
     */
    public static String formatAmount2String(Double d, boolean b) {
        if (!(d instanceof Double)) {
            return "";
        }
        if (b == true) {//正常都显示两位小数
            DecimalFormat df = new DecimalFormat("#.00");
            if (d < 1 || d == 0) {
                return "0" + df.format(d);
            }
            return df.format(d);
        } else {//整数不显示小数
            if (d == 0 || d % 1 == 0) {//整数 或者0直接返回
                DecimalFormat df = new DecimalFormat("#");
                return df.format(d);
            } else {
                DecimalFormat df = new DecimalFormat("#.00");
                if (d < 1 || d == 0) {
                    return "0" + df.format(d);
                }
                return df.format(d);
            }
        }
    }


    /**
     * 格式化金额 保留两位小数带有 ￥单位
     *
     * @param d
     * @return
     */
    public static String formatAmountUnit(Double d) {
        return "￥" + formatAmount2String(d);
    }

    /**
     * 格式化时间  服务器给的是long转成String
     *
     * @param longDate
     * @return
     */
    public static String formatDate(long longDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yy年MM月dd日");
        String format = sdf.format(longDate);
        if (!TextUtils.isEmpty(format)) {
            return format;
        }
        return "";
    }

    /**
     * 格式化时间  上传到服务器  string转成long  以秒为单位
     *
     * @param strDate
     * @return
     */
    public static long formatDate(String strDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yy年MM月dd日");
        try {
            Date parse = sdf.parse(strDate);
            return parse.getTime() / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 格式化时间    string转成long  以毫秒为单位
     *
     * @param strDate
     * @return
     */
    public static long formatDateMillisecond(String strDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm");
        try {
            Date parse = sdf.parse(strDate);
            return parse.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 时间转换
     *
     * @param time 但位是秒
     * @return
     */
    public static String formatDateSecond(long time) {
        return formatDateMillisecond(time * 1000);
    }

    /**
     * 时间转换
     *
     * @param time 单位是毫秒
     * @return
     */
    public static String formatDateMillisecond(long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String format = sdf.format(time);
        return format;
    }

    /**
     * 时间转换 yyyy年MM月dd日 转成 yyyy-MM-dd
     *
     * @return
     */
    public static String formatDateString2String(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date parse = sdf.parse(time);
            String format = sdf2.format(parse);
            return format;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "";
    }


}
